# 从flask这个包中导入Flask这个类
# Flask这个类是项目的核心，以后很多操作都是基于这个类的对象
# 注册url、注册蓝图等都是基于这个类的对象
from flask import Flask,redirect,render_template,request
#导入bp时使用as以便进行识别区分
from apps.cms import bp as cms_bp
from apps.front import bp as front_bp
from apps.common import bp as common_bp
from apps.ueditor import bp as ueditor_bp
import config
# 导入db，否则无法向mysql中导入数据，并将db初始化
from exts import db,mail,alidayu
from flask_wtf.csrf import CSRFProtect


def create_app():
    #
    # 创建一个Flask对象，传递__name__参数进去
    # __name__参数的作用：
    # 1. 可以规定模版和静态文件的查找路径
    # 2. 以后一些Flask插件，比如Flask-migrate、Flask-SQLAlchemy如果报错了，那么Flask
    # 可以通过这个参数找到具体的错误位置
    app = Flask(__name__)
    #
    app.config.from_object(config)

    # 注册蓝图
    app.register_blueprint(cms_bp)
    app.register_blueprint(front_bp)
    app.register_blueprint(common_bp)
    app.register_blueprint(ueditor_bp)

    # 初始化db
    db.init_app(app)
    mail.init_app(app)
    alidayu.init_app(app)
    CSRFProtect(app)

    return app


# 如果这个文件是作为一个主文件运行，那么就执行app.run()方法
# 也就是启动这个网站
if __name__ == '__main__':
    app = create_app()
    # 设置端口
    # app.run()：Flask中的一个测试应用服务器
    # while True:
    #   listen()
    #   input()

    # https://127.0.0.1:8000/
    # app.run(port=8000,ssl_context='adhoc')

    # http://127.0.0.1:8000/
    app.run(port=8000)